今天來講手機通知使用者比較常見的兩種方法,如我們常用的Line或其他應用,都會又有振動或鈴聲通知來告知有新訊息,今天就來時做一個能產生震動和播放鈴聲的app,讓往後各位設計app通知消息能夠更立體喔!
其功能包括管理手機震動。
<uses-permission android:name="android.permission.VIBRATE" />
//獲取Vibrator實例
Vibrator vibrator = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);
//一關一開,repeat:-1代表不repeat,0或其他代表repeat。
vibrator.vibrate(new long[]{100, 500, 100, 500},0 );
//產生一次為期2秒的震動
//vibrator.vibrate(2000);
//VibrationEffect
//vibrator.vibrate(VibrationEffect.createWaveform(new long[]{500, 1000},new int[]{20,255},1));
產生震動的方法很簡單,透過呼叫方法vibrate()並給予震動秒數,單位為毫秒,即可產生出一個震動。
也可以透過VibrationEffect設定更細微的震動,可設定屬定包括持續時間timings、震幅amplitudes等,更多的可以看看官方文件,傳入的參數可以包括陣列,讓震動的持續時間和震幅產生變化喔。
3. 關閉震動(若設定循環)
vibrator.cancel();
震動可以設計程循環或是一次性,當循環時,停止就需依賴cancel(),不然會一直震動下去喔!!
<!-- 銀幕鎖也可以播聲音 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 網路,如果要播放望路上的資源 -->
<uses-permission android:name="android.permission.INTERNET"/>
//預設提示聲
Uri notification_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
//預設鈴聲
Uri ringtone_uri = RingtoneManager.getActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE);
這例提供兩個基本的音效,包括鈴聲和短的提示聲。
mediaPlayer = MediaPlayer.create(this, ringtone_uri);
if (mediaPlayer == null) {
//有的手機鈴聲會建立失敗
Log.e("TAG", "startAlarm: mediaPlayer 建立失敗 " );
} else {
mediaPlayer.setLooping(true);// 設定鈴聲迴圈播放
try {
//create()其實有做,可以不做
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
//開始播放
mediaPlayer.start();
}
把上一步獲得的Uri透過create()傳入並建立MediaPlayer,最後透過start()即可撥放鈴聲。
4. 停止播放
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
於震動概念相同,當設定程迴圈播放時,需要適時停止和釋放。
其實今天的功能我個人認為實作起來最基本的功能是挺容易的,都已經有寫好的Function可以取得需要的東西,我覺得如果沒有特別要求,這已經是很足夠的了,不過還是要多加控管使用和結束時機喔,否則會有很奇怪的使用體驗。最後其實MediaPlayer還有很多的擴展空間,如過有客製或更進階的需求可以在多加研究~